const Koa = require('./koa')

const app = new Koa;
//分逻辑来处理请求
//next表示执行下一个函数
//洋葱模型  

const sleep = () => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log("sleep")
            resolve()
        }, 1000);
    })
}
app.use(async (ctx, next) => {
    console.log(1)
    /**
     * 需要等待  需要+ await
     * 为了保证最外层的中间件  可以等待里层的中间件执行完毕   await next()/  return next()
     */
    await next()
  
 
    console.log(2)
    ctx.body = "hello"
})

app.use(async (ctx, next) => {
    console.log(3)
    await sleep() //需要等待一秒  才能给body赋值
   await next()
  
    ctx.body = "world"
    console.log(4)
})

app.use(async (ctx, next) => {
    console.log(5)
    
   await next()
  
    
    console.log(6)
})

/**
 * 这些中间件   会组合成一个大函数 = Promise   并且执行  执行完会采用ctx的结果 
 */

 app.on('error',function(e){
    console.log(e,"-------------------------")
 })

app.listen(3000)